package com.dhb.pattern.factory.simple;

import com.dhb.pattern.factory.IWine;

/**
 * 功能描述：
 * 创建人：citymoon
 * 创建日期：2019/5/1
 */
public class WineFactory {

    /**
     * 通过传递class文件名的方式，解决了不断扩展，导致硬编码的修改问题。
      * @param clazz
     * @return
     */
    public IWine createWine(Class<? extends IWine> clazz){
        try {
            if (null != clazz) {
                return clazz.newInstance();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 通过反射技术，根据类全限定名实例化
     * 方法参数是字符串，可控性有待提升，而且还需要强制转型。
     * @param className
     * @return
     */
    public IWine createWineByClassName(String className){
        try {
            if(!(null == className || "".equals(className))){
                return (IWine)Class.forName(className).newInstance();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
